home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1996 January / macformat-033.iso / mac / Shareware City / Graphics / GifScan 1.6 / Sources / GSBalloons.pl < prev    next >
Encoding:
Perl Script  |  1995-10-09  |  2.8 KB  |  134 lines  |  [TEXT/McPL]

  1. #!perl
  2. # Perl -Sx "{0}" {"Parameters"}; Exit {status}
  3.  
  4. $balloons_strh_id = 26724;
  5.  
  6. # chdir "MacMarc:Development:Projects:GifScan";
  7.  
  8. open(STDIN,"GifScan Balloons Data") || die "Failed to open input";
  9. open(STDOUT,">GSBalloons.r") || die "Failed to open output";
  10.  
  11. print <<INCLUDES;
  12. #include "Types.r"
  13. #include "BalloonTypes.r"
  14.  
  15. INCLUDES
  16.  
  17. @strings=();
  18.  
  19. while (<>) {
  20.   chop;
  21.   next if /^$/;
  22.   last if /^END$/;
  23.   die "Bad line '$_'" unless /(DIALOG|MENU)\s+(\d+)\s*(.*)/;
  24.   $dialog = $1 eq "DIALOG"; $id = $2; $name=$3;
  25.   @items=();
  26.     @menus=();
  27.     $menuitem=0;
  28.   while (<>) {
  29.     chop;
  30.     next if /^$/;
  31.     if ($dialog) {
  32.         last if /^END-DIALOG$/;
  33.         die "Bad dialog line '$_'" unless /^(\d+)\.(\d+)\s+(.*)/;
  34.         die "Quote in line" if /"/;
  35.         $base=($1-1)*4;
  36.         $item=$base+$2-1;
  37.         $index = &find_string($3);
  38.         $items[$item] = $index;
  39.         $items[$base+0] = 0 unless $items[$base+0];
  40.         $items[$base+1] = 0 unless $items[$base+1];
  41.         $items[$base+2] = 0 unless $items[$base+2];
  42.         $items[$base+3] = 0 unless $items[$base+3];
  43.     } else {
  44.         last if /^END-MENU$/;
  45.         die "Quote in line '$_'" if /"/;
  46.         die "Bad menu line '$_'" unless /^(\d) (.*)/ || /^(\d)$/;
  47.             if ($1 == 0) {
  48.               if ($1 eq $_) {
  49.                 $menus[$menuitem]='-';
  50.                 } else {
  51.                   $menus[$menuitem]= $2;
  52.                 }
  53.                 $menuitem++;
  54.             } else {
  55.                 $base=($menuitem-1)*4;
  56.                 $item=$base+$1-1;
  57.                 $index = &find_string($2);
  58.                 $items[$item] = $index;
  59.                 $items[$base+0] = 0 unless $items[$base+0];
  60.                 $items[$base+1] = 0 unless $items[$base+1];
  61.                 $items[$base+2] = 0 unless $items[$base+2];
  62.                 $items[$base+3] = 0 unless $items[$base+3];
  63.             }
  64.     }
  65.   }
  66.     if ($dialog) {
  67.       print <<"HEADER";
  68. resource 'hdlg' ($id,"$name") {
  69. \t2,0,0,0,0,
  70. \tHMSkipItem { },
  71. \t{
  72. HEADER
  73.     } else {
  74.         print <<"HEADER";
  75. resource 'hmnu' ($id,"$name") {
  76. \t2,0,0,0,
  77. \tHMSkipItem { },
  78. \t{
  79. HEADER
  80.     }
  81.   for $item (1..@items/4) {
  82.     $base = ($item-1)*4;
  83.     if ($items[$base+0] || $items[$base+1] ||
  84.         $items[$base+2] || $items[$base+3]) {
  85.             print "\t\tHMStringResItem { /* $item */\n";
  86.             if ($dialog) {
  87.           print <<"ITEM";
  88. \t\t\t{0,0},
  89. \t\t\t{0,0,0,0},
  90. ITEM
  91.             }
  92.       for $k (0..3) {
  93.         $index = $items[$base+$k];
  94.         if ($index) {
  95.           print "\t\t\t$balloons_strh_id,$index,\n";
  96.         } else {
  97.           print "\t\t\t0,0,\n";
  98.         }
  99.       }
  100.       print "\t\t},\n";
  101.     } else {
  102.          print "\t\tHMSkipItem { }, /* $item */\n";
  103.     }
  104.   }
  105.   print <<"TRAILER";
  106. \t}
  107. };
  108.  
  109. TRAILER
  110. }
  111.  
  112. print "resource 'STR#' ($balloons_strh_id,\"Balloon Help Strings\") {\n";
  113. print "\t{\n";
  114. for $index (1..@strings) {
  115.   print "\t\t/* $index */\n";
  116.   print "\t\t\"$strings[$index-1]\",\n";
  117. }
  118. print "\t}\n";
  119. print "};\n\n";
  120.  
  121. close(STDOUT);
  122. close(STDIN);
  123.  
  124. sub find_string {
  125.   local($s) = @_;
  126.   local($i);
  127.   for $i (1..@strings) {
  128.     return $i if $s eq $strings[$i-1];
  129.   }
  130.   $i = @strings;
  131.   $strings[$i] = $s;
  132.   return $i+1;
  133. }
  134.